import axios from 'axios'
import { ElMessage } from 'element-plus'

// 根据环境设置基础URL
// 在开发环境中使用相对路径'/api'，配合Vite代理功能
// 在生产环境中使用完整URL
const getBaseUrl = () => {
  // 开发环境
  if (import.meta.env.DEV) {
    return '/api'
  }
  // 生产环境
  return import.meta.env.VITE_APP_BASE_API || ''
}

// 创建axios实例
const service = axios.create({
  // 基础URL配置
  baseURL: getBaseUrl(),
  // 请求超时时间
  timeout: 10000,
  // 请求头配置
  headers: {
    'Content-Type': 'application/json;charset=utf-8'
  }
})

// 请求拦截器
  service.interceptors.request.use(
    config => {
      // 添加调试日志，查看请求数据
      console.log('请求配置:', config)
      if (config.method === 'post' && config.data) {
        console.log('发送的数据:', config.data)
      }
      
      // 从localStorage获取token
      const token = localStorage.getItem('token')
      if (token) {
        // 添加token到请求头
        config.headers.Authorization = `Bearer ${token}`
      }
      return config
    },
    error => {
      // 请求错误处理
      console.error('请求错误:', error)
      return Promise.reject(error)
    }
  )

// 响应拦截器
  service.interceptors.response.use(
    response => {
      // 添加响应调试日志
      console.log('响应数据:', response)
      
      // 获取响应数据
      const res = response.data
      
      // 根据业务状态码处理
      if (res && response.status !== 200) {
        // 显示错误信息
        ElMessage.error(res.message || '请求失败')
        
        // 特殊状态码处理
        if (res.code === 401) {
          // 未授权，清除token并跳转登录
          localStorage.removeItem('token')
          // 这里可以添加跳转到登录页面的逻辑
          // window.location.href = '/login'
        }
        
        return Promise.reject(new Error(res.message || '请求失败'))
      }
      
      // 请求成功，返回完整的response对象，包含data字段
      return response
    },
    error => {
      // 网络错误处理，添加详细调试信息
      console.error('响应错误:', error)
      if (error.response) {
        console.error('错误响应数据:', error.response.data)
        console.error('错误响应状态:', error.response.status)
      } else if (error.request) {
        console.error('请求未收到响应:', error.request)
      } else {
        console.error('请求配置错误:', error.message)
      }
      
      // 根据错误类型显示不同的提示
      if (error.response) {
        // 服务器响应了，但状态码不是2xx
        const { status, data } = error.response
        switch (status) {
          case 401:
            ElMessage.error('登录已过期，请重新登录')
            localStorage.removeItem('token')
            // 这里可以添加跳转到登录页面的逻辑
            break
          case 403:
            ElMessage.error('没有权限访问该资源')
            break
          case 404:
            ElMessage.error('请求的资源不存在')
            break
          case 500:
            ElMessage.error('服务器内部错误')
            break
          default:
            ElMessage.error(data?.message || `请求失败(${status})`)
        }
      } else if (error.request) {
        // 请求已发送，但没有收到响应
        ElMessage.error('网络连接失败，请检查网络设置')
      } else {
        // 请求配置出错
        ElMessage.error('请求配置错误')
      }
      
      return Promise.reject(error)
    }
  )

// 导出请求方法
export default service